UNPKG

7.97 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/values/StringExotic.js"],"names":["StringExotic","ObjectValue","constructor","realm","intrinsicName","intrinsics","StringPrototype","$GetOwnProperty","P","desc","Properties","OrdinaryGetOwnProperty","$Realm","undefined","ThrowIfMightHaveBeenDeleted","value","StringValue","index","To","CanonicalNumericIndexString","Infinity","str","$StringData","throwIfNotConcreteString","len","length","resultStr","charAt","writable","enumerable","configurable","$OwnPropertyKeys","keys","i","push","ToString","NumberValue","properties","getOwnPropertyKeysArray","key","filter","x","map","parseInt","ToInteger","sort","y","symbols"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow strict-local */\n\nimport type { Realm } from \"../realm.js\";\nimport type { PropertyKeyValue, Descriptor } from \"../types.js\";\nimport { ObjectValue, NumberValue, StringValue } from \"./index.js\";\nimport { IsInteger, IsArrayIndex } from \"../methods/is.js\";\nimport { Properties, To } from \"../singletons.js\";\nimport invariant from \"../invariant.js\";\n\nexport default class StringExotic extends ObjectValue {\n constructor(realm: Realm, intrinsicName?: string) {\n super(realm, realm.intrinsics.StringPrototype, intrinsicName);\n }\n\n // ECMA262 9.4.3.1\n $GetOwnProperty(P: PropertyKeyValue): Descriptor | void {\n // 1. Assert: IsPropertyKey(P) is true.\n\n // 2. Let desc be OrdinaryGetOwnProperty(S, P).\n let desc = Properties.OrdinaryGetOwnProperty(this.$Realm, this, P);\n\n // 3. If desc is not undefined, return desc.\n if (desc !== undefined) {\n Properties.ThrowIfMightHaveBeenDeleted(desc.value);\n return desc;\n }\n\n // 4. If Type(P) is not String, return undefined.\n if (typeof P !== \"string\" && !(P instanceof StringValue)) return undefined;\n\n // 5. Let index be ! CanonicalNumericIndexString(P).\n let index = To.CanonicalNumericIndexString(\n this.$Realm,\n typeof P === \"string\" ? new StringValue(this.$Realm, P) : P\n );\n\n // 6. If index is undefined, return undefined.\n if (index === undefined || index === null) return undefined;\n\n // 7. If IsInteger(index) is false, return undefined.\n if (IsInteger(this.$Realm, index) === false) return undefined;\n\n // 8. If index = -0, return undefined.\n if (1.0 / index === -Infinity) return undefined;\n\n // 9. Let str be the String value of S.[[StringData]].\n let str = this.$StringData;\n invariant(str);\n str = str.throwIfNotConcreteString();\n\n // 10. Let len be the number of elements in str.\n let len = str.value.length;\n\n // 11. If index < 0 or len ≤ index, return undefined.\n if (index < 0 || len <= index) return undefined;\n\n // 12. Let resultStr be a String value of length 1, containing one code unit from str, specifically the code unit at index index.\n let resultStr = new StringValue(this.$Realm, str.value.charAt(index));\n\n // 13. Return a PropertyDescriptor{[[Value]]: resultStr, [[Writable]]: false, [[Enumerable]]: true, [[Configurable]]: false}.\n return {\n value: resultStr,\n writable: false,\n enumerable: true,\n configurable: false,\n };\n }\n\n // ECMA262 9.4.3.2\n $OwnPropertyKeys(): Array<PropertyKeyValue> {\n // 1. Let keys be a new empty List.\n let keys = [];\n\n // 2. Let str be the String value of O.[[StringData]].\n let str = this.$StringData;\n invariant(str);\n str = str.throwIfNotConcreteString();\n\n // 3. Let len be the number of elements in str.\n let len = str.value.length;\n\n // 4. For each integer i starting with 0 such that i < len, in ascending order,\n for (let i = 0; i < len; ++i) {\n // a. Add ! ToString(i) as the last element of keys.\n keys.push(new StringValue(this.$Realm, To.ToString(this.$Realm, new NumberValue(this.$Realm, i))));\n }\n\n // 5. For each own property key P of O such that P is an integer index and ToInteger(P) ≥ len, in ascending numeric index order,\n let properties = this.getOwnPropertyKeysArray();\n for (let key of properties\n .filter(x => IsArrayIndex(this.$Realm, x))\n .map(x => parseInt(x, 10))\n .filter(x => To.ToInteger(this.$Realm, x) >= len)\n .sort((x, y) => x - y)) {\n // i. Add P as the last element of keys.\n keys.push(new StringValue(this.$Realm, key + \"\"));\n }\n\n // 6. For each own property key P of O such that Type(P) is String and P is not an integer index, in ascending chronological order of property creation,\n for (let key of properties.filter(x => !IsArrayIndex(this.$Realm, x))) {\n // i. Add P as the last element of keys.\n keys.push(new StringValue(this.$Realm, key));\n }\n\n // 7. For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation,\n for (let key of this.symbols.keys()) {\n // i. Add P as the last element of keys.\n keys.push(key);\n }\n\n // 12. Return keys.\n return keys;\n }\n}\n"],"file":"StringExotic.js"}
\No newline at end of file